/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2023-12-25
 * Time: 22:17
 */


//  7-10 两个序列的中位数(减治法)  ---- (C++版本）
/*#include <iostream>
#include <vector>

using namespace std;

        int func(vector<int>& nums1, int left1, int right1, vector<int>& nums2, int left2, int right2) {
        if ((right1 - left1) == 0 && (right2 - left2) == 0) {
        int a = nums1[left1];
        int b = nums2[left2];
        return (a > b) ? b : a;
        }

        int mid1 = (left1 + right1) / 2;
        int mid2 = (left2 + right2) / 2;

        int ret1 = nums1[mid1];
        int ret2 = nums2[mid2];

        int num = 0;

        if (ret1 < ret2) {
        int len1 = right1 - left1;
        int len2 = right2 - left2;

        if (len1 % 2 == 0) {
        if (len2 % 2 == 0) {
        num = func(nums1, mid1, right1, nums2, left2, mid2);
        } else {
        num = func(nums1, mid1, right1, nums2, left2, mid2);
        }
        } else {
        if (len2 % 2 == 0) {
        num = func(nums1, mid1 + 1, right1, nums2, left2, mid2);
        } else {
        num = func(nums1, mid1 + 1, right1, nums2, left2, mid2);
        }
        }
        } else {
        int len1 = right1 - left1;
        int len2 = right2 - left2;

        if (len1 % 2 == 0) {
        if (len2 % 2 == 0) {
        num = func(nums1, left1, mid1, nums2, mid2, right2);
        } else {
        num = func(nums1, left1, mid1, nums2, mid2 + 1, right2);
        }
        } else {
        if (len2 % 2 == 0) {
        num = func(nums1, left1, mid1, nums2, mid2, right2);
        } else {
        num = func(nums1, left1, mid1, nums2, mid2 + 1, right2);
        }
        }
        }

        return num;
        }

        int findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size();
        int result = func(nums1, 0, n - 1, nums2, 0, n - 1);
        return result;
        }

        int main() {
        int n;
        cin >> n;
        vector<int> nums1(n);
        vector<int> nums2(n);

        for (int i = 0; i < n; i++) {
        cin >> nums1[i];
        }
        for (int i = 0; i < n; i++) {
        cin >> nums2[i];
        }

        int result = findMedianSortedArrays(nums1, nums2);
        cout << result << endl;

        return 0;
        }*/










/*
#include <iostream>
#include <vector>

using namespace std;

int func(vector<int>& nums1, int left1, int right1, vector<int>& nums2, int left2, int right2) {
    if (left1 == right1 && left2 == right2) {
        return min(nums1[left1], nums2[left2]);
    }

    int mid1 = (left1 + right1) / 2;
    int mid2 = (left2 + right2) / 2;

    int ret1 = nums1[mid1];
    int ret2 = nums2[mid2];

    if (ret1 < ret2) {
        if ((right1 - left1) % 2 == 0) {
            if ((right2 - left2) % 2 == 0) {
                return func(nums1, mid1, right1, nums2, left2, mid2);
            } else {
                return func(nums1, mid1, right1, nums2, left2, mid2);
            }
        } else {
            if ((right2 - left2) % 2 == 0) {
                return func(nums1, mid1 + 1, right1, nums2, left2, mid2);
            } else {
                return func(nums1, mid1 + 1, right1, nums2, left2, mid2);
            }
        }
    } else {
        if ((right1 - left1) % 2 == 0) {
            if ((right2 - left2) % 2 == 0) {
                return func(nums1, left1, mid1, nums2, mid2, right2);
            } else {
                return func(nums1, left1, mid1, nums2, mid2 + 1, right2);
            }
        } else {
            if ((right2 - left2) % 2 == 0) {
                return func(nums1, left1, mid1, nums2, mid2, right2);
            } else {
                return func(nums1, left1, mid1, nums2, mid2 + 1, right2);
            }
        }
    }
}

int findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    int n = nums1.size();
    int result = func(nums1, 0, n - 1, nums2, 0, n - 1);
    return result;
}

int main() {
    int n;
    cin >> n;
    vector<int> nums1(n);
    vector<int> nums2(n);

    for (int i = 0; i < n; i++) {
        cin >> nums1[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> nums2[i];
    }

    int result = findMedianSortedArrays(nums1, nums2);
    cout << result << endl;

    return 0;
}


*/










/*   //返回2个中位数当中靠前的那个 (对于偶数个数据的中位数)


import java.util.Scanner;

// 现在来说下面的这个写法还是有一些问题的（找中位数的这个写法）


public class Main {
    public static int findMedianSortedArrays(int[] nums1, int[] nums2) {
        //递归，找到2个数组的中位数进行比较，然后选定要递归的2个数组的左右区间

        //递归出口：2个数组都剩下有效元素的个数为3的时候，合并这3个数找到中位数并返回
        // 有效元素的个数为3： 一个数组的有效大小是1，一个数组的有效大小是2


        int d=func(nums1,0,nums1.length-1,nums2,0,nums2.length-1);

        return d;
    }

    public static int func(int[] nums1,int left1,int right1, int[] nums2,int left2,int right2){


        // 最后每个数组都只剩下了 一个有效元素的情况,返回较小值
        if((right1-left1)==0 && (right2-left2)==0){
            int a=nums1[left1];
            int b=nums2[left2];

            return (a>b)?b:a;
        }


        int mid1=(left1+right1)/2;
        int mid2=(left2+right2)/2;

        int ret1=nums1[mid1];
        int ret2=nums2[mid2];

        int num=0;
        //所要求的中位数一定在ret1和ret2之间
        if(ret1<ret2){
            //递归2个数组的相应子数组
            // nums1数组的右区间 nums2数组的左区间


            //数组划分，要保证划分的子序列是相等大小才行，所以才有了奇数和偶数的区分
            //对于奇数个有效元素：分为 [left,mid]  [mid,right]
            //对于偶数个有效元素：分为 [left,mid]  [mid+1,right]
            int len1=right1-left1;
            int len2=right2-left2;
            //len的值%2为0就表示有效元素个数为奇数个
            if(len1%2==0){
                if(len2%2==0){
                    //数组1有奇数个，数组2也有奇数个
                    num=func(nums1,mid1,right1,nums2,left2,mid2);
                }else{
                    //数组1有奇数个，数组2有偶数个
                    num=func(nums1,mid1,right1,nums2,left2,mid2);
                }
            }else if(len1%2!=0){
                if(len2%2==0){
                    //数组1有偶数个，数组2有奇数个
                    num=func(nums1,mid1+1,right1,nums2,left2,mid2);
                }else{
                    //数组1有偶数个，数组2有偶数个
                    num=func(nums1,mid1+1,right1,nums2,left2,mid2);
                }
            }


            return num;


        }else{
            //递归2个数组的相应子数组
            // nums1数组的左区间 nums2数组的右区间



            //对于奇数个有效元素：分为 [left,mid]  [mid,right]
            //对于偶数个有效元素：分为 [left,mid]  [mid+1,right]
            int len1=right1-left1;
            int len2=right2-left2;
            //len的值%2为0就表示有效元素个数为奇数个
            if(len1%2==0){
                if(len2%2==0){
                    //数组1有奇数个，数组2也有奇数个
                    num=func(nums1,left1,mid1,nums2,mid2,right2);
                }else{
                    //数组1有奇数个，数组2有偶数个
                    num=func(nums1,left1,mid1,nums2,mid2+1,right2);
                }
            }else if(len1%2!=0){
                if(len2%2==0){
                    //数组1有偶数个，数组2有奇数个
                    num=func(nums1,left1,mid1,nums2,mid2,right2);
                }else{
                    //数组1有偶数个，数组2有偶数个
                    num=func(nums1,left1,mid1,nums2,mid2+1,right2);
                }
            }


            return num;
        }

        //return num;
    }




    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr1=new int[n];
        int[] arr2=new int[n];
        //
        for(int i=0;i<n;i++){
            arr1[i]=sc.nextInt();
        }
        for(int i=0;i<n;i++){
            arr2[i]=sc.nextInt();
        }

        double d=findMedianSortedArrays(arr1,arr2);
        System.out.println((int)d);
    }
}

*/













